/**
 * @param {string} digits
 * @return {string[]}
 */
// 给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

// 给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。
// 输入：digits = "23"
// 输出：["ad","ae","af","bd","be","bf","cd","ce","cf"]
// 示例 2：

// 输入：digits = ""
// 输出：[]
// 示例 3：

// 输入：digits = "2"
// 输出：["a","b","c"]

var letterCombinations = function (digits) {
  if (digits.length == 0) return [];
  const map = { '2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz' };

  const queue = [];
  queue.push('');
  //取出字符串中的数字
  for (let i = 0; i < digits.length; i++) {
    const levelSize = queue.length // digits的长度
    for (let j = 0; j < levelSize; j++) {
      const curStr = queue.shift()
      const letters = map[digits[i]]
      console.log(letters);
      for (const len of letters) {
        queue.push(curStr + len)
      }
    }
  }
  return queue
};
console.log(letterCombinations('23'));